<?php

class Subsidios extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->datosusuario = $this->authentication->getDataLogged();
        $this->load->model('m_subsidio', 'subsidio');
        $this->load->model('m_pago', 'pago');
        $this->load->model('m_concepto', 'concepto');
        $this->load->model('m_banco', 'banco');
        $this->load->model('m_causa', 'causa');
        $this->load->model('m_caratula', 'caratula');
        $this->load->model('m_documento', 'documento');
    }

    /**
     * Listado de Ordenes de pago.
     *
     * @return void
     */
    function index() {
        $data = array(
            'titulo' => 'Lista de Ordenes de Pago',
            'datosusuario' => $this->datosusuario,
            'seleccionar' => 'subsidios',
            'ordenes' => $this->subsidio->getOrdernesPago(),
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/index');
        $this->load->view('templates/footer');
    }

    /**
     * Listado de los ultomos pagos.
     *
     * @return void
     */
    function ultimos_pagos() {
        if (isset($_POST['submit'])) {
            $busqueda['fechaDesde'] = $_POST['fechaDesde'];
            $busqueda['fechaHasta'] = $_POST['fechaHasta'];
        } else {
            $busqueda['fechaDesde'] = date('d/m/Y', strtotime('-1 month'));
            $busqueda['fechaHasta'] = date('d/m/Y');
        }

        $data = array(
            'titulo' => 'Lista de los últimos pagos realizados',
            'datosusuario' => $this->datosusuario,
            'seleccionar' => 'subsidios',
            'busqueda' => $busqueda,
            'cancelar' => 1,
            'ultimos_pagos' => $this->pago->getPagosXFechas($busqueda['fechaDesde'], $busqueda['fechaHasta'], 0),
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/ultimos_pagos');
        $this->load->view('templates/footer');
    }

    /**
     * Listado de los ultomos pagos.
     *
     * @return void
     */
    function ultimos_pagos_cancelados() {
        if (isset($_POST['submit'])) {
            $busqueda['fechaDesde'] = $_POST['fechaDesde'];
            $busqueda['fechaHasta'] = $_POST['fechaHasta'];
        } else {
            $busqueda['fechaDesde'] = date('d/m/Y', strtotime('-1 month'));
            $busqueda['fechaHasta'] = date('d/m/Y');
        }

        $data = array(
            'titulo' => 'Lista de los últimos pagos cancelados',
            'datosusuario' => $this->datosusuario,
            'seleccionar' => 'subsidios',
            'busqueda' => $busqueda,
            'ultimos_pagos' => $this->pago->getPagosXFechas($busqueda['fechaDesde'], $busqueda['fechaHasta'], 1),
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/ultimos_pagos');
        $this->load->view('templates/footer');
    }

    /**
     * Realiza el pago de una Orden de pago
     *
     * @return void
     */
    function pagar($id = '') {

        if ($id == '')
            redirect('subsidios/');

        $orden = $this->subsidio->getOrdernePago((int) $id);
        $this->subsidio->get((int) $id);

        $this->form_validation->set_rules($this->pago->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $pago = $_POST;
            } else {
                $pago = $this->pago->valoresPorDefecto();
            }

            $data = $this->_get_form_data();

            $data['titulo'] = 'Pagar una orden de pago';
            $data['pago'] = $pago;
            $data['orden'] = $orden;
            $data['seleccionar'] = 'subsidios';

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('subsidios/leftbar');
            $this->load->view('subsidios/form_pagar');
            $this->load->view('templates/footer');
        } else {
            $this->load->model('m_logs', 'logs');
            $_POST['fecha'] = normal_to_database_date($_POST['fecha']);

            $this->pago->setAttributes($this->input);
            $this->pago->save();
            $this->pago->logs('nuevo', $this->datosusuario['id'], $this->logs);

            $this->subsidio->pagoId = $this->pago->id;
            $this->subsidio->save();
            $this->subsidio->logs('actualizar', $this->datosusuario['id'], $this->logs);

            set_message(array('1' => 'Se ha realizado el pago del subsidio.'));

            redirect('subsidios/');
        }
    }

    /**
     * Realiza el pago directo
     *
     * @return void
     */
    function nuevo() {

        $validacion = array_merge($this->pago->getValidacion('|callback__suma_importe'), array(array('field' => 'beneficiarios[]', 'label' => 'Beneficiarios', 'rules' => 'required'), array('field' => 'importes[]', 'label' => 'Importes de Beneficiarios', 'rules' => 'required|money')));

        $this->form_validation->set_rules($validacion);
        if ($this->form_validation->run() === FALSE) {
            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));

                if (isset($_POST['beneficiarios'])) {
                    $i = 0;
                    foreach ($_POST['beneficiarios'] as $key => $id) {
                        $beneficiario[$i] = $this->causa->buscarXDemandadoId($id);
                        $beneficiario[$i]->caratula = $this->caratula->getUltimaCaratula($beneficiario[$i]->causaId);
                        $beneficiario[$i]->importe = $_POST['importes'][$key];
                        $i++;
                    }

                    $_POST['beneficiarios'] = $beneficiario;
                    unset($_POST['importes']);
                }

                $pago = $_POST;
            } else {
                $pago = $this->pago->valoresPorDefecto();
            }


            $data = $this->_get_form_data();

            $data['titulo'] = 'Nuevo Pago Directo';
            $data['pago'] = $pago;
            $data['seleccionar'] = 'subsidios';

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('subsidios/leftbar');
            $this->load->view('subsidios/form');
            $this->load->view('templates/footer');
        } else {
            $this->load->model('m_logs', 'logs');
            $_POST['fecha'] = normal_to_database_date($_POST['fecha']);

            $this->pago->setAttributes($this->input);
            $this->pago->save();
            $this->pago->logs('nuevo', $this->datosusuario['id'], $this->logs);

            if ((int) $_POST['importes'][0] == '0') {
                $count = count($_POST['importes']);
                $importe = $_POST['importe'] / $count;

                for ($i = 0; $i < $count; $i++) {
                    $_POST['importes'][$i] = $importe;
                }
            }

            foreach ($_POST['beneficiarios'] as $key => $id) {
                $this->subsidio->id = null;
                $this->subsidio->demandadoId = $id;
                $this->subsidio->demandadoXPedidoSubsidioId = 0;
                $this->subsidio->pagoId = $this->pago->id;
                $this->subsidio->fecha = $_POST['fecha'];
                $this->subsidio->descripcion = '';
                $this->subsidio->importe = $_POST['importes'][$key];
                $this->subsidio->save();
                $this->subsidio->logs('nuevo', $this->datosusuario['id'], $this->logs);
            }

            set_message(array('1' => 'Se realizó correctamente el pago directo .'));

            redirect('subsidios/');
        }
    }

    /**
     * 
     */
    function buscar() {

        $busqueda = array();
        if (isset($_POST['submit'])) {
            if ($this->input->post('buscar') == 1) {
                $causaId = ($this->input->post('causaId') != '') ? $causaId = $this->input->post('causaId') : '';

                $caratula = ($this->input->post('caratula') != '') ? $caratula = $this->input->post('caratula') : '';

                $nroExpediente = ($this->input->post('nroExpediente') != '') ? $this->input->post('nroExpediente') : '';

                if (($causaId != '') OR ($caratula != '') OR ($nroExpediente != '')) {
                    $busqueda = $this->causa->buscarXCausa($causaId, $caratula, $nroExpediente);
                }
            } else {
                $matricula = ($this->input->post('matricula') != '') ? $this->input->post('matricula') : '';

                $numeroDoc = ($this->input->post('numeroDoc') != '') ? $this->input->post('numeroDoc') : '';

                $nombre = ($this->input->post('nombre') != '') ? $this->input->post('nombre') : '';

                if (($matricula != '') OR ($numeroDoc != '') OR ($nombre != '')) {
                    $busqueda = $this->causa->buscarXDemandado($matricula, $numeroDoc, $nombre);
                }
            }
        }

        $top = count($busqueda);
        for ($i = 0; $i < $top; $i++) {
            $fechaInicio = explode(' ', $busqueda[$i]->fechaInicio);
            $busqueda[$i]->fechaInicio = $fechaInicio[0];
            $busqueda[$i]->caratula = $this->caratula->getUltimaCaratula($busqueda[$i]->causaId);
        }

        $data = array(
            'titulo' => 'Buscar Profesionales intervinientes en el Pago',
            'datosusuario' => $this->datosusuario,
            'busqueda' => $busqueda,
        );

        $this->load->view('templates/header', $data);
        $this->load->view('subsidios/buscar');
        $this->load->view('templates/footer');
    }

    function detalle($id) {
        $pago = $this->pago->getPago((int) $id);

        $data = array(
            'pago' => $pago,
            'titulo' => 'Detalle',
            'datosusuario' => $this->datosusuario,
        );

        $this->load->view('templates/header', $data);
        $this->load->view('subsidios/detalle');
        $this->load->view('templates/footer');
    }

    /**
     *
     * @param type $id 
     */
    function pedidos_subsicios_pendientes() {
        $this->load->model('m_pedido_subsidio', 'pedido_subsidio');

        $pedido_subsidios = $this->pedido_subsidio->getListaPendientes();

        $top = count($pedido_subsidios);
        for ($i = 0; $i < $top; $i++) {
            $pedido_subsidios[$i]->documentos = $this->documento->getDocumentosPorPedidoSubsidioId($pedido_subsidios[$i]->dpsId);
        }

        $data = array(
            'titulo' => 'Listado de Pedido de Subsidios Pendientes',
            'datosusuario' => $this->datosusuario,
            'pedido_subsidios' => $pedido_subsidios,
            'pathdocumento' => PATH_UPLOAD,
            'seleccionar' => 'subsidios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/pedidos_subsicios_pendientes');
        $this->load->view('templates/footer');
    }

    function pedidos_subsicios_pendientes_print($id) {
        $this->load->model('m_pedido_subsidio', 'pedido_subsidio');

        $pedido_subsidio = $this->pedido_subsidio->getPendienteId($id);

        $data = array(
            'titulo' => 'Pedido de Subsidio Pendiente',
            'pedido_subsidio' => $pedido_subsidio,
        );

        $this->load->view('templates/header', $data);
        $this->load->view('subsidios/pedidos_subsicios_pendientes_print');
        $this->load->view('templates/footer');
    }

    /**
     * 
     */
    function responder($id) {
        $this->load->model('m_pedido_subsidio', 'pedido_subsidio');
        $this->load->model('m_demandado_x_pedido_subsidio', 'demandado_x_pedido_subsidio');
        $this->load->model('m_subsidio', 'subsidio');

        $pedido_subsidio = $this->pedido_subsidio->getPendienteId($id);
        $fechaActo = explode(' ', $pedido_subsidio->fechaActo);
        $pedido_subsidio->fechaActo = $fechaActo[0];

        $pedido_subsidio->documentos = $this->documento->getDocumentosPorPedidoSubsidioId($pedido_subsidio->dpsId);

        if (is_object($pedido_subsidio)) {

            if (isset($_POST['rechazar'])) {

                $this->demandado_x_pedido_subsidio->get($this->input->post('id'));
                $this->demandado_x_pedido_subsidio->estado = 2;
                $this->demandado_x_pedido_subsidio->respuesta = $this->input->post('respuesta');
                $this->demandado_x_pedido_subsidio->save();

                set_message(array('1' => 'Se ha rechazado el pedido de subsidio.'));

                redirect('subsidios/pedidos_subsicios_pendientes');
            }

            if (isset($_POST['aceptar'])) {

                $this->demandado_x_pedido_subsidio->get($this->input->post('id'));
                $this->demandado_x_pedido_subsidio->estado = 1;
                $this->demandado_x_pedido_subsidio->respuesta = $this->input->post('respuesta');
                $this->demandado_x_pedido_subsidio->save();

                $this->subsidio->demandadoId = $pedido_subsidio->demandadoId;
                $this->subsidio->demandadoXPedidoSubsidioId = $this->input->post('id');
                $this->subsidio->pagoId = 0;
                $this->subsidio->fecha = $pedido_subsidio->fecha;
                $this->subsidio->descripcion = $pedido_subsidio->motivo;
                $this->subsidio->importe = $pedido_subsidio->importe;
                $this->subsidio->save();

                set_message(array('1' => 'Se ha aceptado el pedido de subsidio.'));

                redirect('subsidios/pedidos_subsicios_pendientes');
            }

            $data = array(
                'titulo' => 'Responder Pedido de Subsidio Pendiente',
                'datosusuario' => $this->datosusuario,
                'pedido_subsidio' => $pedido_subsidio,
                'estado_pedido_subsidio' => getListEstadoPedidoSubsidio(),
                'pathdocumento' => PATH_UPLOAD,
                'seleccionar' => 'subsidios',
            );

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('subsidios/leftbar');
            $this->load->view('subsidios/responder');
            $this->load->view('templates/footer');
        } else {
            redirect('subsidios/pedidos_subsicios_pendientes');
        }
    }

    /**
     *
     * @param type $id 
     */
    function pedidos_subsicios_rechazados() {
        $this->load->model('m_pedido_subsidio', 'pedido_subsidio');

        $pedido_subsidios = $this->pedido_subsidio->getListaRechazados();

        $data = array(
            'titulo' => 'Listado de Pedido de Subsidios Rechazados',
            'datosusuario' => $this->datosusuario,
            'pedido_subsidios' => $pedido_subsidios,
            'pathdocumento' => PATH_UPLOAD,
            'seleccionar' => 'subsidios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/pedidos_subsicios_resultados');
        $this->load->view('templates/footer');
    }

    /**
     *
     * @param type $id 
     */
    function pedidos_subsicios_aprobados() {
        $this->load->model('m_pedido_subsidio', 'pedido_subsidio');

        $pedido_subsidios = $this->pedido_subsidio->getListaAprobados();

        $data = array(
            'titulo' => 'Listado de Pedido de Subsidios Aprobados',
            'datosusuario' => $this->datosusuario,
            'pedido_subsidios' => $pedido_subsidios,
            'pathdocumento' => PATH_UPLOAD,
            'seleccionar' => 'subsidios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('subsidios/leftbar');
        $this->load->view('subsidios/pedidos_subsicios_resultados');
        $this->load->view('templates/footer');
    }

    /**
     * Obtiene los datos para el formulario.
     *
     * @return array
     */
    private function _get_form_data() {
        $banco_array = $this->banco->getList();

        $banco[''] = 'Seleccione un Banco';

        foreach ($banco_array as $value) {
            $banco[$value->id] = $value->nombre . ' - ' . $value->sucursal . ' - ' . $value->nroCuenta;
        }

        $concepto_array = $this->concepto->getList();

        $concepto[''] = 'Seleccione un Concepto';

        foreach ($concepto_array as $value) {
            $concepto[$value->id] = $value->nombre;
        }

        return $data = array(
            'datosusuario' => $this->datosusuario,
            'bancos' => $banco,
            'conceptos' => $concepto,
            'moneda' => getListMonedas(),
        );
    }

    function cancelar($id) {
        if ($id == '')
            redirect('subsidios/');

        if ($this->pago->get((int) $id)) {
            $this->load->model('m_logs', 'logs');
            $this->pago->logs('cancelado', $this->datosusuario['id'], $this->logs);
            $this->pago->cancelado = 1;
            $this->pago->save();
            set_message(array('1' => 'Se ha cancelado el pago.'));
        }

        redirect('subsidios/');
    }

    function _suma_importe($valor) {
        if ($valor == '') {
            $this->form_validation->set_message('_suma_importe', "El campo Importe es obligatorio.");
            return FALSE;
        } else {
            $suma_importe = 0;
            if (isset($_POST['importes'])) {
                foreach ($_POST['importes'] as $importe) {
                    $suma_importe += $importe;
                }
            }

            if ($suma_importe == 0) {
                return TRUE;
            } else {
                if ($suma_importe != $valor) {
                    $this->form_validation->set_message('_suma_importe', "El campo Importe tiene que ser igual a la suma de los importes de los veneficiarios.");
                    return FALSE;
                } else {
                    return TRUE;
                }
            }
        }
    }

}

